/**
 * process.platform: darwin - Mac
 */

const path = require("path");
const { app, protocol, BrowserWindow, globalShortcut, Notification, Menu, Tray, dialog } = require("electron");

// 注册协议方案
protocol.registerSchemesAsPrivileged([{ scheme: "app", privileges: { secure: true, standard: true } }]);
// 消除chrome的跨域警告
process.env["ELECTRON_DISABLE_SECURITY_WARNINGS"] = true;
// 消除chrome的连接不安全警告
app.commandLine.appendSwitch("--ignore-certificate-errors", "true");

// 设置开机隐藏式自动启动
app.setLoginItemSettings({
  openAtLogin: true,
  openAsHidden: true, // mac
  args: ["--openAsHidden"], // windows
});

let mainWindow = null;
let systemTray = null;
let closeType = 1; // 1-窗口关闭(最小化到托盘) 2-程序退出

// 创建: 窗口
const createWindow = () => {
  // 1. 窗口配置
  mainWindow = new BrowserWindow({
    title: "Vite+Vue3+Electron",
    iconType: "custom",
    icon: path.join(__dirname, "icon.ico"),
    width: 1024,
    height: 600,
    fullscreen: true,
    fullscreenable: false,
    // 窗口设置
    show: true, // 创建时显示
    frame: true, // 边框展示
    center: true, // 屏幕居中
    resizable: true, // 窗口是否支持尺寸调整
    // 网页功能设置
    webPreferences: {
      webSecurity: false, // 跨域
      nodeIntegration: true, // 解决require识别问题
      nodeIntegrationInWorker: true,
      preload: path.join(__dirname, "preload.cjs"), // 预加载脚本
    },
  });
  // 2. 窗口顶部工具栏配置
  mainWindow.setMenu(null);
  // 3. 入口文件地址配置
  switch (app.isPackaged) {
    // 通过应用程序启动
    case true:
      mainWindow.loadFile(path.resolve(__dirname, "../dist/index.html"));
      break;
    // 通过vscode本地启动
    case false:
      mainWindow.loadURL("http://localhost:8000");
      break;
  }
  // 失焦隐藏窗口
  mainWindow.on("blur", () => {
    if (!mainWindow.webContents.isFocused()) handleShowHide("hide");
  });
  // 关闭自动最小化到托盘
  mainWindow.on("close", (event) => {
    if (closeType === 1) {
      event.preventDefault(); // 阻止默认行为
      // 最小化到任务栏
      handleShowHide("hide");
    }
  });
  // 快捷键(控制台): ctrl+shift+i
  globalShortcut.register("CommandOrControl+Shift+i", () => {
    mainWindow.webContents.openDevTools();
  });
  // 快捷键(显隐): ctrl+space
  globalShortcut.register("CommandOrControl+Space", () => {
    if (mainWindow.isVisible()) {
      handleShowHide("hide");
    } else {
      handleShowHide("show");
    }
  });
};
// 创建: 系统托盘
const createSystemTray = () => {
  if (process.platform == "darwin") {
    systemTray = new Tray(path.join(__dirname, "icon.icns"));
  } else {
    systemTray = new Tray(path.join(__dirname, "icon.ico"));
  }
  // 系统托盘菜单
  const trayMenu = Menu.buildFromTemplate([
    // 版本号(检查更新)
    {
      label: "版本号: 1.0.0(检查更新)",
      click: () => sendMessage("Vite+Vue3+Electron", "当前已是最新版本: 1.0.0"),
    },
    // 打开
    {
      label: "打开",
      click: () => mainWindow.show(),
    },
    // 退出
    {
      label: "退出",
      click: () => handleShowHide("quit"),
    },
  ]);
  systemTray.setToolTip("Vite+Vue3+Electron");
  systemTray.setContextMenu(trayMenu);
};

// 工具函数: 发送桌面端消息
const sendMessage = (title, body) => {
  const message = new Notification({
    icon: path.join(__dirname, "icon.ico"),
    title,
    body,
  });
  message.show();
};
// 工具函数: 控制桌面端展示||隐藏
const handleShowHide = (type) => {
  switch (type) {
    // 展示
    case "show": {
      mainWindow.show();
      break;
    }
    // 隐藏
    case "hide": {
      closeType = 1;
      if (process.platform == "darwin") {
        app.hide();
      } else {
        mainWindow.hide();
      }
      break;
    }
    // 退出
    case "quit": {
      closeType = 2;
      app.quit();
      break;
    }
  }
};

// 生命周期: 应用准备就绪
app.on("ready", () => {
  createWindow();
  createSystemTray();
  // 通知提示
  sendMessage("Vite+Vue3+Electron", "欢迎使用Vite+Vue3+Electron, 唤醒快捷键: ctrl+space");
});
// 生命周期: 应用即将退出
app.on("will-quit", () => {
  // 注销快捷键
  globalShortcut.unregister("CommandOrControl+Shift+i");
  globalShortcut.unregister("CommandOrControl+Space");
  // 释放资源
  systemTray.destroy();
});
